package com.bestcem.xm.om.dao;

import com.bestcem.xm.om.entity.UserPack;
import org.springframework.data.domain.PageRequest;

import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;

/**
 * 套餐表(ds_om_user_pack)Dao
 *
 * @author zhangfeng <feng.zhang@idiaoyan.com>
 * @version v1.0
 * @date 2022/6/15 15:12
 */
public interface OmUserPackDao {

    /**
     * 通过id查询套餐
     *
     * @param id 套餐id
     * @return 套餐数据
     */
    UserPack getById(String id);

    /**
     * 根据查询条件发查询套餐列表
     *
     * @param userPack 查询参数
     * @return 套餐列表
     */
    List<UserPack> query(UserPack userPack);

    /**
     * 统计数据条数
     *
     * @param userPack 查询条件(套餐信息)
     * @return 数据条数
     */
    long count(UserPack userPack);

    /**
     * 查询指定行数据
     *
     * @param userPack    查询对象
     * @param pageRequest 分页条件
     * @return List<UserPack
     */
    List<UserPack> queryAllByLimit(UserPack userPack, PageRequest pageRequest);

    /**
     * 保存套餐
     *
     * @param userPack 套餐数据
     */
    void insert(UserPack userPack);

    /**
     * 通过id删除数据
     *
     * @param id 套餐id
     * @return 删除行数
     */
    int deleteById(String id);

    /**
     * 更新数据
     *
     * @param userPack 套餐数据
     */
    void update(UserPack userPack);

    /**
     * 更新数据 by Name
     *
     * @param userPack 套餐数据
     */
    void updateByPackName(UserPack userPack);

    /**
     * 查询所有套餐数据
     *
     * @return List<UserPack>
     */
    List<UserPack> queryAllPack();

    /**
     * 根据套餐类型查询套餐列表
     *
     * @param type 套餐类型
     * @return List<UserPack>
     */
    List<UserPack> findByType(Integer type);

    /**
     * 根据套餐类型查询套餐列表
     *
     * @param type
     * @return
     */
    UserPack findOneByType(Integer type);

    /**
     * 根据套餐id列表查询套餐列表
     *
     * @param packIds 套餐id List
     * @return List<UserPack>
     */
    List<UserPack> listByIds(@NotNull Collection<String> packIds);

    /**
     * 根据套餐类型查询套餐列表
     *
     * @param asList 套餐类型List
     * @return List<UserPack>
     */
    List<UserPack> listByType(List<Integer> asList);

    /**
     * 根据名称查询一条套餐数据
     *
     * @param name
     * @return com.bestcem.xm.om.entity.UserPack
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2022/7/5 15:39
     */
    UserPack getByName(String name);

    /**
     * 根据套餐名称和类型获取套餐
     *
     * @param name
     * @param packageType
     * @return
     */
    UserPack getByNameAndType(String name, Integer packageType);

    /**
     * 根据类型查询
     *
     * @param packageType
     * @return
     */
    UserPack getByType(Integer packageType);

    /**
     * 获取套餐简要信息
     *
     * @param
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/29 18:01
     */
    List<UserPack> listPackBriefInfo();
}
